/* 
给某条动态添加标签的中间件
  验证客户端传递过来的label是否在数据库，是和否对应的处理逻辑
  客户端传入label时，将所有的labels的name和id都保存在ctx的babels中，传递给下一个中间件
*/

const { queryLabelByName, create } = require("../server/labelServer.js")

const verifyLabelExists = async (ctx,next) => {
  // 1. 获取客户端传递的labels
  const {labels} = ctx.request.body
  // 2. 验证labels是否存在于label表
  const newLabels = []
  for (const name of labels) {
    const result = await queryLabelByName(name)
    const labelObj = {name}
    if(result){
      labelObj.id = result.id
    }else {
      const insertRes = await create(name)
      labelObj.id = insertRes.insertId
    }
    newLabels.push(labelObj)
  }
  ctx.labels = newLabels

  await next()
}

module.exports = {
  verifyLabelExists
}